# -*- coding: utf-8 -*-
import webapp2
import exceptions

from event import Event
from webapp2 import uri_for

error = False

class ViewSchedule(webapp2.RequestHandler):

    def get(self, *args, **kwargs):
        global error
        self.response.write('<html><head><title>LKSH Schedule</title></head>')
        self.response.write('<body><div align = "center" style="font-family:cursive"><h1> Расписание на сегодня! </h1></div>')

        event_query = Event.query()
        available_place = ["1 комповник", "2 комповник", "3 комповник", "4 комповник", "Гараж", "Первый корабль", "Второй корабль", "Клуб", "НекРомантик", "Футбольное поле"] # Возможные места проведения
        available_time = ["Первая пара", "Вторая пара", "После обеда", "После ужина"] # Человеческое название времени проведения
        exact_time = ["10:00 - 11:30", "12:00 - 13:30", "14:30 - 16:30", "19:00 - 21:00"] # Точное время проведения

        self.response.write('<table border = "2" align = "center">')

        # Создаем шапку таблицы
        self.response.write('<tr><td><div align="center" style="font-size:30px">LKSH</div></td>')
        for i in range(len(available_time)):
            self.response.write('<td><div align="center">%s<br/>%s</div></td>' % (available_time[i], exact_time[i]))
        self.response.write('</tr>')

        # Выводим основное содержание таблицы
        # TODO: Проработать красивый формат вывода каждого события в таблице
        for i in range(len(available_place)):
            self.response.write('<tr><td>%s</td>' % available_place[i]) # Не забываем про первую колонку
            for j in range(len(available_time)):
                found = False # Если найдем мероприятие в этом помещении в это время, то пометим как True
                self.response.write('<td>')
                for event in event_query:
                    if event.place == i and event.time == j: # Условие того, что мы нашли нужное мероприятие
                        found = True
                        self.response.write('<div align = "center">%s<br/><div style="font-style:italic;">(%s)</div></div>' % (event.name, event.teacher)) # Выводим информацию про мероприятие
                if not found: # Выведем что-нибудь, если мероприятие не нашлось
                    self.response.write('<div align = "center">-----</div>')
                self.response.write('</td>')
            self.response.write('</tr>')

        self.response.write('</table></br>')
        self.response.write('<form action="%s" method="post"><div align = "center"><input type="submit" value="Очистить расписание"></div></form>' % uri_for('clear')) # Добавляем кнопку очистки расписания
        
        # Раздел добавления события
        self.response.write('<div align = "center" style="font-family:cursive"><h2> Добавить новое событие </h2></div>') 

        # Поля для внесение названия и времени проведения мероприятия и имени преподавателя, который его проводит
        self.response.write("""
            <form action="%s" method="post">
            <div align = "center">
            <label for="name">Название мероприятия:</label>
            <input id="name" type="text" name="name"><br/>
            <label for="teacher">Имя преподавателя:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
            <input id="teacher" type="text" name="teacher"><br/>
            <label for="time">Время мероприятия:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
            <select id="time" name="time" style="width:150px;">""" % uri_for('add'))

        # Создаем список для выбора времени (показываем только человеческое название, на точное время все равно никто не смотрит)
        for i in range(len(available_time)):
            self.response.write('<option value="%s">%s</option>' % (str(i), available_time[i]))

        self.response.write("""
            </select><br/>
            <label for="place">Место проведения:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label>
            <select id="place" name="place" style="width:150px;">""")

        # Создаем список для выбора места проведения
        for i in range(len(available_place)):
            self.response.write('<option value="%s">%s</option>' % (str(i), available_place[i]))

        # Передаем всю информацию в обработчик!
        self.response.write("""
            </select><br/><br/>
            <input type="submit" value="Добавить!" name="submit">
            </div>
            </form>""")

        # Если непосредственно перед показом данной страницы мы обнаружили ошибку, то выводим сообщение об этом
        if error:
            self.response.write('<div align = "center" style="font-family:cursive"><h3><font color="red">Ошибочка вышла!</font></h3></div>')
            error = False
        self.response.write('</body></html>')

class ClearSchedule(webapp2.RequestHandler):
    def __init__(self, *args, **kwargs):
        super(ClearSchedule, self).__init__(*args, **kwargs)
    def post(self, *args, **kwargs):
        for event in Event.query().iter(keys_only=True): # Вытаскиваем только ключи записей, и удаляем всё
            event.delete()
        self.redirect(uri_for('show')) # После чего перенаправляем на страницу отображения


class AddEvent(webapp2.RequestHandler):
    def __init__(self, *args, **kwargs):
        super(AddEvent, self).__init__(*args, **kwargs)

    def post(self, *args, **kwargs):
        global error
        try:
            time = int(self.request.get('time'))
            place = int(self.request.get('place'))
            name = self.request.get('name')
            teacher = self.request.get('teacher')

            # Проверим, не пересекается ли новое мероприятие с уже добавленным
            event_query = Event.query()
            for event in event_query:
                if event.place == place and event.time == time: # Если коллизия обнаружена, то делаем отметку об этом и переходим на страницу отображения информации
                    error = True
                    self.redirect(uri_for('show'))
                    return

        # TODO: Добавить возможность показывать более детализованный отчет об ошибке, которая произошла
        # TODO: Если возникает коллизия, то надо предоставить юзеру право выбрать другое время / место, либо заменить старое событие на новое

        except exceptions.ValueError:
            error = True
            self.redirect(uri_for('show'))
            return
        new_event = Event(time=time, place=place, name=name, teacher=teacher) # Создаём новое событие
        new_event.put()                                                       # и записываем его
        self.redirect(uri_for('show'))
